<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Reflect概述</title>
</head>
<body>
    <h1>Reflect概述</h1>
    <h2>Reflect是一个内置对象，提供拦截JavaScript操作的方法</h2>

    <script>
        // 老写法
        'assign' in Object // true
        // 新写法
        Reflect.has(Object, 'assign') // true

        // 老写法
        Function.prototype.apply.call(Math.floor, undefined, [1.75]) // 1
        // 新写法
        Reflect.apply(Math.floor, undefined, [1.75]) // 1

        // 实例：使用 Reflect.construct 代替 new
        function Person(name) {
            this.name = name;
        }
        
        // new 的写法
        const person1 = new Person('张三');
        
        // Reflect.construct 的写法
        const person2 = Reflect.construct(Person, ['张三']);
        
        console.log(person1.name); // '张三'
        console.log(person2.name); // '张三'
    </script>
</body>
</html> 